import axios from 'axios'
import store from '../store/index'
import router from '../router/index'
import QS from 'qs'; // 引入qs模块，用来序列化post类型的数据，后面会提到
import { Modal } from 'ant-design-vue'

const Axios = axios.create({
	baseURL: process.env.BASE_URL,  // api的base_url
	timeout: 5000  // 请求超时时间
});

// 针对axios请求进行预处理
Axios.interceptors.request.use(config => {
	if (store.state.loginToken) {
		config.data.loginToken = store.state.loginToken;
	}
}, error => {
	alert('错误的传参', 'fail')
	return Promise.reject(error)
});

// 针对axios响应进行预处理
Axios.interceptors.response.use(res => {
	if (response.status === 200) {
		return Promise.resolve(response);
	} else {
		return Promise.reject(response);
	}
}, error => {
	if (error.response.status) {
		switch (error.response.status) {
			// 401: 未登录
			// 未登录则跳转登录页面，并携带当前页面的路径
			// 在登录成功后返回当前页面，这一步需要在登录页操作。
			case 401:
				router.replace({
					path: '/login',
					query: {
						redirect: router.currentRoute.fullPath
					}
				});
				break;

			// 403 token过期
			// 登录过期对用户进行提示
			// 清除本地token和清空vuex中token对象
			// 跳转登录页面
			case 403:
				Modal.error({
					title: '温馨提示',
					content: '登录状态信息过期,请重新登录'
				});
				// 清除token
				localStorage.removeItem('loginToken');
				store.commit('loginToken', null);
				// 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
				setTimeout(() => {
					router.replace({
						path: '/login',
						query: {
							redirect: router.currentRoute.fullPath
						}
					});
				}, 1000);
				break;

			// 404请求不存在
			case 404:
				Modal.error({
					title: '错误提示',
					content: '网络请求不存在'
				});
				break;
			// 其他错误，直接抛出错误提示
			default:
				Modal.error({
					title: '错误提示',
					content: error.response.data.message
				});
		}
		return Promise.reject(error.response);
	}
});

export default Axios